package com.gem.day05;

/**
 * 本类用来演示类定义
 * Java类->Account类->银行账号类别(抽象概念)
 * 
 * @author easonsy
 * 2020年7月22日 上午10:57:15
 */
public class Account {
	//属性
	/*
	 * 注意
	 * 1.属性的添加是根据业务需求
	 * 2.属性也叫做成员变量,也叫做全局变量,也叫做域
	 * 3.成员变量和局部变量的差别:
	 * 		a.成员变量可在类中任何方法中被访问;局部变量只能在定义它的范围内使用
	 * 		b.成员变量定义后如果没有赋值,则系统会提供默认值;局部变量不赋值将不能使用
	 */
	//private表示属性私有化,外界不能随意访问
	private String accountNo;//账户号
	private String password;//密码
	private double balance;//余额
	private String owner;//持有人姓名
	private String phone;//银行预留手机

	/*
	 * 构造方法
	 * 特点:没有返回类型,方法名与类名相同
	 * 作用:供创建对象使用
	 * 
	 * 注意:
	 * 1.构造方法可以重载
	 * 2.如果当前类中没有任何构造方法,则系统会自动提供一个空参构造供创建对象使用,
	 *    但是如果该类中已经提供了其他构造方法,则空参构造就不会自动提供了
	 */
	public Account() {
		System.out.println("空参构造");
	}

	public Account(String accountNo, String password) {
		this.accountNo = accountNo;
		this.password = password;
	}

	//注意:此处调用具有参数有效性判断的set方法实现构造方法赋值同样具有参数有效性判断
	public Account(String accountNo, String password, double balance, String ownner, String phone) {
		//this关键字
		//1.表示当前对象的
		//this.accountNo = accountNo;
		//this.password = password;

		//2.表示当前类中其他的构造方法
		//注意: 当this表示调用当前类其他构造时,此条语句必须写在构造方法的第一行!
		this(accountNo, password);

		this.balance = balance;
		//this.owner = ownner;
		setOwner(ownner);
		this.phone = phone;
	}

	//添加方法供修改属性和访问属性使用(get/set)
	public String getAccountNo() {
		return accountNo;
	}

	public void setAccountNo(String accountNo) {
		this.accountNo = accountNo;
	}

	public String getOwner() {
		return owner;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	//定义以下方法还可以进行参数有效性验证
	public void setOwner(String owner) {
		if (owner.equals("小习")) {
			System.err.println("想不想去喝茶!");
			return;
		}
		this.owner = owner;
	}

	//行为
	/*public void disposit(double money) {
		balance += money;
	}
	
	public void withdraw(double money) {
		balance -= money;
	}*/
}
